package org.cabbage.lintcode;

import java.util.Stack;

/**
 * 实现一个带有取最小值min方法的栈，min方法将返回当前栈中的最小值。
 * <p>
 * 你实现的栈将支持push，pop 和 min 操作，所有操作要求都在O(1)时间内完成。
 *
 * @author gezhangyuan
 */
public class MinStack {

    static Stack<Integer> stack = null;
    static Stack<Integer> min = null;

    public MinStack() {
        stack = new Stack<Integer>();
        min = new Stack<Integer>();
    }

    /*
     * @param number: An integer
     * @return: nothing
     */
    public void push(int number) {
        if (min.size() == 0 || min.peek() > number) {
            min.push(number);
        } else {
            min.push(min.peek());
        }
        stack.push(number);
    }

    /*
     * @return: An integer
     */
    public int pop() {
        min.pop();
        return stack.pop();
    }

    /*
     * @return: An integer
     */
    public int min() {
        return min.peek();
    }
}
